﻿using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Linq;
using kk.components.contracts;
using kk.messages.contracts.DataModel;
using kk.messages.contracts.ViewModel;

namespace kk.portal
{
    public partial class PortalForm : Form, IReservierungsrahmen

    {
        private IEnumerable<Platzposition> selectedPlatzpositionen;
        private Regex emailregex = new Regex(@"^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");
        private Vorstellung AktuelleVorstellung = new Vorstellung("Book of Eli", new DateTime(2010, 3, 17, 20, 0, 0), "Saal1");

        public event Action<Request<Vorstellung, Belegungsplan>> OnBelegungsplanZuVorstellung;
        public event Action<Belegungsplan> OnBelegungsplan;
        public event Action<Request<Reservierungsanfrage, string>> OnReservierungsanfrage;

        public PortalForm(Control Belegungsplanansicht) {
            InitializeComponent();
            pnlContent.Controls.Add(Belegungsplanansicht,0,1);
            Belegungsplanansicht.Dock = DockStyle.Fill;
        }

        public void ProcessPlatzwahlChanged(IEnumerable<Platzposition> platzpositionen)
        {
            selectedPlatzpositionen = platzpositionen;
            btnReservieren.Enabled = platzpositionen.Count() != 0;
        }

        public void Configure() {
            var Request = new Request<Vorstellung, Belegungsplan>(AktuelleVorstellung, x => OnBelegungsplan(x));

            OnBelegungsplanZuVorstellung(Request);
        }



        internal bool IsEmailAdress(string emailadress)
        {
            return emailregex.IsMatch(emailadress);
        }

        private void btnReservieren_Click(object sender, EventArgs e)
        {
            if (!IsEmailAdress(txtEmailAdress.Text))
            {
                MessageBox.Show("Keine gültige E-Mail-Adresse");
                return;
            }

            var Reservierungsanfrage = new Reservierungsanfrage(txtName.Text, txtEmailAdress.Text, AktuelleVorstellung,
                                                                this.selectedPlatzpositionen);
            var Request = new Request<Reservierungsanfrage, string>(Reservierungsanfrage, x => MessageBox.Show("Reservierungsnummer: " + x));

            OnReservierungsanfrage(Request);
        }
    }
}